home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / ms_dos / tool / dprint / dp_print.c < prev    next >
Text File  |  1994-08-11  |  5KB  |  241 lines

  1. /*
  2.  
  3. 8086|Printman/POSTCARD ハガキ印刷モジュール
  4. Copyright (c) 1993,94 Delmonta
  5.  
  6. */
  7.  
  8. #include<string.h>
  9. #include<del_prn.h>
  10. #include"dprint.h"
  11.  
  12. enum    PRNBIOS    Prn_machine = PRNBIOS_TOWNS;
  13. enum    PRNMODE    Prn_mode    = PRNMODE_ESCP;
  14.  
  15. struct    DFLFILE Dflfile = 
  16. {
  17.     PRNBIOS_TOWNS,PRNMODE_ESCP,
  18.     850,300,
  19.     {PROP_LEFT,PROP_RIGHT,PROP_CENTER,PROP_CENTER,PROP_FLEFT}
  20. };
  21.  
  22. static    struct POSTCARD    Printdata;
  23. static    unsigned    Lmrgin;
  24.  
  25. /*---------------------------------------------------------------------------*/
  26.  
  27. static    void    putdata(unsigned ypos)
  28. {
  29. static    int    Lpos,Rpos;
  30.     int    l,p;
  31.  
  32.     l = strlen(Printdata.data[ypos]);
  33.  
  34.     switch    (Dflfile.printop[ypos])
  35.     {
  36.     case PROP_LEFT:        p = 0;                break;
  37.     case PROP_RIGHT:    p = 24-l;            break;
  38.     case PROP_CENTER:    p = (24-l)/2;            break;
  39.     case PROP_FLEFT:    p = Lpos;            break;
  40.     case PROP_FRIGHT:    p = Rpos-l;            break;
  41.     case PROP_FCENTER:    p = (Rpos-Lpos-l)/2 + Lpos;    break;
  42.     }
  43.  
  44.     if    (p<0)
  45.         p = 0;
  46.  
  47.     Lpos = p;
  48.     Rpos = p+l;
  49.  
  50.     prn_setcarridge(MM2DOTS(25)-Lmrgin);
  51.     if    (ypos>=3)
  52.         prn_double(2,2);
  53.     else
  54.         prn_double(2,1);
  55.  
  56.     while    (p--)
  57.         prn_putchar(' ');
  58.  
  59.     prn_putstr(Printdata.data[ypos]);
  60.  
  61.     prn_double(1,1);
  62.     prn_linefeed(MM2DOTS(9.5));
  63. }
  64.  
  65. /*---------------------------------------------------------------------------*/
  66.  
  67. void    dp_printcard(unsigned start,unsigned end)
  68. {
  69.     if    (start > end)
  70.     {
  71.         unsigned    temp = end;
  72.         end   = start;
  73.         start = temp;
  74.     }
  75.  
  76.     for    ( start=start ; start<=end ; start++)
  77.     {
  78.         int        i;
  79.         unsigned    code[5];
  80.         unsigned    umrgin = Dflfile.umrgin*9L/127;
  81.  
  82.         Lmrgin = Dflfile.lmrgin*9L/127;
  83.         Printdata = *Card[start];
  84.  
  85.         prn_init();
  86.         prn_tategaki(PRNTATE_NOHALF);
  87.  
  88.         prn_linefeed(MM2DOTS(10)-umrgin);
  89.  
  90.         if    (Printdata.zipcode[0] == -1)
  91.         {    for    (i=0 ; i<5 ; i++)
  92.                 code[i] = 0x8140;
  93.         }
  94.         else            /* 0x8140 == ' ' */
  95.         {            /* 0x824f == '0' */
  96.             code[0] = 0x824f + Printdata.zipcode[0]/100;
  97.             code[1] = 0x824f + (Printdata.zipcode[0]/10)%10;
  98.             code[2] = 0x824f + Printdata.zipcode[0]%10;
  99.  
  100.             if    (Printdata.zipcode[1] == -1)
  101.                 code[3] = code[4] = 0x8140;
  102.             else
  103.             {
  104.                 code[3] = 0x824f + Printdata.zipcode[1]/10;
  105.                 code[4] = 0x824f + Printdata.zipcode[1]%10;
  106.             }
  107.         }
  108.  
  109.         for    (i=0 ; i<3 ; i++)
  110.         {
  111.             prn_setcarridge(MM2DOTS(12)-Lmrgin);
  112.             prn_putchar(code[4-i]);
  113.             prn_linefeed(0);
  114.  
  115.             putdata(i);
  116.         }
  117.  
  118.         prn_setcarridge(MM2DOTS(12)-Lmrgin);
  119.         prn_putchar(code[1]);
  120.         prn_linefeed(MM2DOTS(9.5));
  121.  
  122.         prn_setcarridge(MM2DOTS(12)-Lmrgin);
  123.         prn_putchar(code[0]);
  124.         prn_linefeed(0);
  125.  
  126.         putdata(3);
  127.         putdata(4);
  128.  
  129.         prn_formfeed();
  130.     }
  131.  
  132.     prn_init();
  133. }
  134.  
  135. /*---------------------------------------------------------------------------*/
  136.  
  137. static    void    set_printop(void)
  138. {
  139.     static    struct    SHEETSEL mode[] =
  140.         {    {19,"左寄せ"},
  141.             {27,"右寄せ"},
  142.             {35,"中央寄せ"},
  143.             {45,"左合わせ"},
  144.             {55,"右合わせ"},
  145.             {65,"中央合わせ"},
  146.         };
  147.  
  148.     static    struct    SHEETDAT sheet[] = 
  149.         {    {SHEET_SELECT,"住所1",0,3,mode},
  150.             {SHEET_SELECT,"住所2",0,6,mode},
  151.             {SHEET_SELECT,"住所3",0,6,mode},
  152.             {SHEET_SELECT,"氏名1",0,6,mode},
  153.             {SHEET_SELECT,"氏名2",0,6,mode},
  154.         };
  155.  
  156.     int    ret[5];
  157.     int    i;
  158.  
  159.     for    (i=0 ; i<5 ; i++)
  160.         ret[i] = (int)Dflfile.printop[i];
  161.  
  162.     if    (dp_sheetselect(SYSLINE_START,sheet,5,ret))
  163.     {
  164.         for    (i=0 ; i<5 ; i++)
  165.             Dflfile.printop[i] = (enum PRINTOP)ret[i];
  166.     }
  167. }
  168.  
  169. /*---------------------------------------------------------------------------*/
  170.  
  171. static    void    prnsetup(void)
  172. {
  173. static    struct    SHEETSEL
  174.     com[] = {    {19,"PC-9800"},
  175.             {28,"FMR/TOWNS"},
  176.             {39,"DOS/V"},
  177.             {50,"J-3100/AX"}
  178.         },
  179.     prn[] = {    {19,"ESC/P24-J84"},
  180.             {32,"MSX漢字プリンタ"},
  181.             {51,"PC-PR201/101H"},
  182.             {66,"FMPRシリーズ"},
  183.         };
  184.  
  185.     static    struct    SHEETDAT sheet[] = 
  186.     {
  187.         {SHEET_SELECT,"コンピューター機種",0,4,com},
  188.         {SHEET_SELECT,"プリンタ機種",0,4,prn},
  189.         {SHEET_VALUE2,"上マージン(mm)",-32699,32699,NULL},
  190.         {SHEET_VALUE2,"左マージン(mm)",-32699,32699,NULL},
  191.     };
  192.  
  193.     int    ret[4];
  194.  
  195.     ret[0] = Dflfile.prn_machine;
  196.     ret[1] = Dflfile.prn_mode;
  197.     ret[2] = Dflfile.umrgin;
  198.     ret[3] = Dflfile.lmrgin;
  199.  
  200.     if    (dp_sheetselect(SYSLINE_START,sheet,4,ret))
  201.     {
  202.         Prn_machine    = Dflfile.prn_machine = (enum PRNBIOS)ret[0];
  203.         Prn_mode       = Dflfile.prn_mode    = (enum PRNMODE)ret[1];
  204.         Dflfile.umrgin = ret[2];
  205.         Dflfile.lmrgin = ret[3];
  206.     }
  207. }
  208.  
  209. /*---------------------------------------------------------------------------*/
  210.  
  211. void    dp_printmenu(void)
  212. {
  213.     static    struct MENUDAT    menu[] =
  214.         {
  215.             {'P',"印刷","ハガキに宛名を印刷します"},
  216.             {'S',"プリンタ設定","プリンタの機種などを設定します"},
  217.             {'M',"各行設定","各行の印刷方法を設定します"},
  218.         };
  219.  
  220.     unsigned    s,e;
  221. prnmenu_rep:
  222.     switch    (dp_menuselect("F6:印刷メニュー",3,menu))
  223.     {
  224.     case -1:
  225.         return;
  226.     case 0:
  227.         if    (!input_st_ed("印刷",&s,&e))
  228.             goto prnmenu_rep;
  229.         dp_printcard(s,e);
  230.         break;
  231.     case 1:
  232.         prnsetup();
  233.         break;
  234.     case 2:
  235.         set_printop();
  236.         break;
  237.     }
  238.  
  239.     goto prnmenu_rep;
  240. }
  241.